var loadFinished = false;
$(document).ready(function(){
    for (var key in localStorage){
        if($('#todos').find('li').find('.todo').html() == ""){
            $('#todos').find('li').find('.todo').html(localStorage[key]); 
            $('#todos').find('li').find('.todo').prop('id', (key));            
        }else{
            newRow(key, localStorage.getItem(key));
        }
    }
    if($('#todos').find('li').find('.todo').html() != ""){
        newRow();
    }    
    loadFinished = true;
});

$(document).on('blur', '.todo', function(){
    if(loadFinished){
        saveTodo($(this));
        if($(this).is(":last") && $(this).html() !== ""){
            newRow();
        }
    }
});

var clickedOnTodo = false;
$(document).on('click', '.todo', function(){
   $(this).parent().find('input[type="checkbox"]').prop('checked',false);
   clickedOnTodo = true;
});
var clickedOnChk = false;
$(document).on('click', 'input[type="checkbox"]', function(){
    clickedOnChk = true;
})

$(document).on('click', 'li', function(){
    if($(this).find('.todo').html() != "" && !clickedOnTodo && !clickedOnChk){
        $(this).find('input[type="checkbox"]').prop('checked', !$(this).find('input[type="checkbox"]').is(':checked'));
        $(this).find('input[type="checkbox"]').change();
    }else{
        clickedOnTodo = false;
        clickedOnChk = false;
    }
});

$(document).on('change', 'input[type="checkbox"]', function(){
    if($(this).is(':checked')){
        var toDelete = $(this).parent().find('.todo').attr('id');
        $(this).parent().find('.todo').css('text-decoration', 'line-through');
        $(this).parent().fadeOut(2500, function(){
            if($(this).is(':first-child') && $(this).is(':last-child')){
                $(this).find('.todo').html('');
                $(this).find('.todo').css('text-decoration', 'none');
                $(this).find('input[type="checkbox"]').prop('checked', false);
                $(this).show();
            }else{
                $(this).remove();
            }
            removeTodo(toDelete);
        });
    }else{
        $(this).parent().stop();
        $(this).parent().fadeIn(0);
        $(this).parent().find('.todo').css('text-decoration', 'none');
    }
});

function newRow(id, text){
    id = typeof id != 'undefined' ? id : '';
    text = typeof text != 'undefined' ? text : '';
    $('#todos').append('<li class="highlight"><input type="checkbox"><span class="todo" id="' + id + '" contenteditable>' + text + '</span></li>');
}
    
function saveTodo(todo){
    if($(todo).html() != ""){
        if($(todo).attr('id') != "" && typeof $(todo).attr('id') != "undefined"){
            key = $(todo).prop('id');
        }else{
            var lastKey;
            for (var key in localStorage){
                lastKey = key;
            }
            if(!$.isNumeric(lastKey)){
                lastKey = 0;
            }
            key = parseInt(lastKey)+1;
        }
        localStorage.setItem(key, $(todo).html());
        $(todo).prop('id', key);
    }
}

function removeTodo(key){
    localStorage.removeItem(key);
}